#define _CRT_SECURE_NO_WARNINGS 1
#include "Stack.h"
//有效的括号
//给定一个只包括 '('，')'，'{'，'}'，'['，']' 的字符串 s ，判断字符串是否有效。
//有效字符串需满足：
//左括号必须用相同类型的右括号闭合。
//左括号必须以正确的顺序闭合。
//每个右括号都有一个对应的相同类型的左括号。

bool isValid(char* s) 
{
	stack st;
	StackInit(&st);
	while (*s)
	{
		//右括号进栈
		if (*s == '(' || *s == '{' || *s == '[')
		{
			StackPush(&st, *s);
		}
		else
		{
			//数量不匹配(栈里面进几个必须出几个)否则数量不匹配
			if (StackEmpty(&st))
			{
				StackDestory(&st);
				return false;
			}
			char topval = StackTop(&st);
			StackPop(&st);
			//判断顺序是否匹配
			if (*s == ')' && topval != '('
				|| *s == '}' && topval != '{'
				|| *s == ']' && topval != '[')
			{
				StackDestory(&st);
				return false;
			}
		}
		s++;
	}
	bool ret = StackEmpty(&st);
	StackDestory(&st);
	return ret;
}
int main()
{
	char* s = "(]";

	printf("%d", isValid(s));
	return 0;
}